<?php

namespace origin;

/**
 * 钩子类
 * @author dece <decezz@qq.com>
 */
class Hook
{
	/**
	 * 标签
	 */
	public static $tags = [];

	/**
	 * 添加行为
     * @param  string   $tag      	行为名称
     * @param  Closure  $behavior   行为动作
     * @return void
	 */
	public static function add( string $tag = '' , \Closure $behavior )
	{
		self::$tags[] = $behavior;
	}

	/**
	 * 获取行为
     * @param  string   $tag      	行为名称
     * @return Closure  $behavior   行为动作
	 */
	public static function get( string $tag = '' )
	{
		if (array_key_exists($tag, self::$tags)) {
			return self::$tags[$tag];
		}
		return false;
	}

	/**
	 * 监听
     * @param  string  $tag    行为名称
     * @param  mixed   $params 传人的参数
     * @param  mixed   $extra  额外参数
     * @return mixed
	 */
	public static function listen( string $tag = '' , &$params = null , $extra = null )
	{
		// 获取行为
		$behavior = self::get($tag);
		// 执行
		return call_user_func_array($behavior, [ & $params, $extra]);
	}
}